#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_LENGTH 80

int cmp(const void *a, const void *b) {
    return strcmp(*(char **)a, *(char **)b);
}

int main() {
    int n;
    printf("请输入字符串的个数：");
    scanf("%d", &n);

    // 动态分配指针数组
    char **strArr = (char **)malloc(n * sizeof(char *));
    if (strArr == NULL) {
        printf("动态分配内存失败！\n");
        exit(1);
    }

    // 逐个读入字符串
    for (int i = 0; i < n; i++) {
        strArr[i] = (char *)malloc((MAX_LENGTH + 1) * sizeof(char));
        if (strArr[i] == NULL) {
            printf("动态分配内存失败！\n");
            exit(1);
        }
        printf("请输入第%d个字符串：", i + 1);
        getchar();  // 去掉回车
        fgets(strArr[i], MAX_LENGTH + 1, stdin);

        // 如果字符串最后一个字符是 '\n'，将其替换为 '\0'
        int len = strlen(strArr[i]);
        if (strArr[i][len - 1] == '\n') {
            strArr[i][len - 1] = '\0';
        }
    }

    // 排序指针数组
    qsort(strArr, n, sizeof(char *), cmp);

    // 输出排序后的字符串
   for (int i = 0; i < n; i++) 
   { printf("%s\n", strArr[i]); }

   // 释放动态分配的内存
for (int i = 0; i < n; i++) {
    free(strArr[i]);
}
free(strArr);

return 0;
}